package com.bjb.vr.operation.controller;

import com.bjb.vr.common.ao.SysDeptAo;
import com.bjb.vr.common.result.BaseErrorCode;
import com.bjb.vr.common.result.BaseResult;
import com.bjb.vr.common.result.CommonResult;
import com.bjb.vr.common.service.SysDeptService;
import com.bjb.vr.common.vo.SysDeptVo;
import com.bjb.vr.common.vo.UmsAccountVo;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;

/**
 * @description: 员工与部门管理
 * @author: hujingbo
 * @create: 2022-08-23 16:56
 **/
@RestController
@RequestMapping("/api/operation/v1")
public class SysDeptController {

    @Resource
    private SysDeptService deptService;


    /**
     * 查询组织架构树
     *
     * @return
     */
    @PostMapping("/queryDeptTree")
    public BaseResult queryDeptTree(@RequestBody SysDeptAo sysDeptAo) {
        List<SysDeptVo> deptVos = deptService.queryDeptTree(sysDeptAo);
        return CommonResult.Ok().setResult(deptVos);
    }

    /**
     * 查询上级部门列表
     *
     * @return
     */
    @PostMapping("/queryDeptList")
    public BaseResult queryDeptList(@RequestBody SysDeptAo sysDeptAo) {
        List<SysDeptVo> deptVos = deptService.queryDeptList(sysDeptAo);
        return CommonResult.Ok().setResult(deptVos);
    }

    /**
     * 查询部门员工列表
     *
     * @return
     */
    @PostMapping("/queryDeptStaffList")
    public BaseResult queryDeptStaffList(@RequestBody SysDeptAo sysDeptAo) {
        List<UmsAccountVo> umsAccountVos = deptService.queryDeptStaffList(sysDeptAo);
        return CommonResult.Ok().setResult(umsAccountVos);
    }

    /**
     * 新增部门
     *
     * @return
     */
    @PostMapping("/addDept")
    public BaseResult addDept(@RequestBody SysDeptAo sysDeptAo) {
        // 查询上级部门是否存在
//        Assert.notNull(sysDeptAo.getParentId(), "上级部门不能为空");
//        boolean exist = deptService.queryHigher(sysDeptAo);
//        if (!exist) {
//            return CommonResult.Fail("上级部门不存在，请新建客户！");
//        }
        // 新增部门
        boolean success = deptService.addDept(sysDeptAo);
        if (!success) {
            return CommonResult.Fail(BaseErrorCode.ERROR_ADD);
        }
        return CommonResult.Ok();
    }

    /**
     * 编辑部门
     *
     * @return
     */
    @PostMapping("/updateDept")
    public BaseResult updateDept(@RequestBody SysDeptAo sysDeptAo) {
        // 查询上级部门是否存在
        Assert.notNull(sysDeptAo.getId(), "部门ID不能为空");
        // 编辑部门
        boolean success = deptService.updateDept(sysDeptAo);
        if (!success) {
            return CommonResult.Fail(BaseErrorCode.ERROR_UPDATE);
        }
        return CommonResult.Ok();
    }

    /**
     * 删除部门
     *
     * @return
     */
    @PostMapping("/deleteDept")
    public BaseResult deleteDept(@RequestBody SysDeptAo sysDeptAo) {
        // 删除部门
        BaseResult baseResult = deptService.deleteDept(sysDeptAo);
        if (!baseResult.isSuccess()) {
            return CommonResult.Fail(BaseErrorCode.ERROR_REMOVE);
        }
        return CommonResult.Ok();
    }
}
